{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# SVM实验（MNIST & CIFAR-10）\n",
    "#本实验将使用支持向量机（SVM）模型对MNIST和CIFAR-10数据集进行分类任务，分析其表现并进行可视化。"
   ],
   "id": "c357c1ab5aa661d5"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:32:04.374206Z",
     "start_time": "2025-06-11T00:32:00.045125Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms"
   ],
   "id": "c078c2c9cf31b9ff",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 加载数据集",
   "id": "8bcedca7f1f1e87a"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:32:05.759334Z",
     "start_time": "2025-06-11T00:32:04.386243Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def load_mnist():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5,), (0.5,))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def load_cifar10():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def dataset_to_numpy(dataset, flatten=True):\n",
    "    X = []\n",
    "    y = []\n",
    "    for img, label in dataset:\n",
    "        arr = img.numpy()\n",
    "        if flatten:\n",
    "            arr = arr.flatten()\n",
    "        else:\n",
    "            arr = arr.transpose(1, 2, 0)\n",
    "        X.append(arr)\n",
    "        y.append(label)\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "    return X, y\n",
    "\n",
    "mnist_train, mnist_test = load_mnist()\n",
    "cifar_train, cifar_test = load_cifar10()\n",
    "print(f\"MNIST训练集样本数: {len(mnist_train)}，测试集样本数: {len(mnist_test)}\")\n",
    "print(f\"CIFAR-10训练集样本数: {len(cifar_train)}，测试集样本数: {len(cifar_test)}\")"
   ],
   "id": "2207a14c4625c85a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST训练集样本数: 60000，测试集样本数: 10000\n",
      "CIFAR-10训练集样本数: 50000，测试集样本数: 10000\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 数据预处理",
   "id": "a266adce12d340dc"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:32:17.645164Z",
     "start_time": "2025-06-11T00:32:05.982942Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# MNIST\n",
    "X_train_m, y_train_m = dataset_to_numpy(mnist_train)\n",
    "X_test_m, y_test_m = dataset_to_numpy(mnist_test)\n",
    "# CIFAR-10\n",
    "X_train_c, y_train_c = dataset_to_numpy(cifar_train)\n",
    "X_test_c, y_test_c = dataset_to_numpy(cifar_test)\n",
    "# 只取部分样本\n",
    "n_samples = 2000  # SVM较慢，减少样本数\n",
    "X_train_m, y_train_m = X_train_m[:n_samples], y_train_m[:n_samples]\n",
    "X_test_m, y_test_m = X_test_m[:500], y_test_m[:500]\n",
    "X_train_c, y_train_c = X_train_c[:n_samples], y_train_c[:n_samples]\n",
    "X_test_c, y_test_c = X_test_c[:500], y_test_c[:500]\n",
    "# 标准化\n",
    "scaler_m = StandardScaler().fit(X_train_m)\n",
    "X_train_m = scaler_m.transform(X_train_m)\n",
    "X_test_m = scaler_m.transform(X_test_m)\n",
    "scaler_c = StandardScaler().fit(X_train_c)\n",
    "X_train_c = scaler_c.transform(X_train_c)\n",
    "X_test_c = scaler_c.transform(X_test_c)"
   ],
   "id": "26643e6309e9a4cf",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# SVM模型训练与评估",
   "id": "a6dade2e6a35d2cd"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:32:25.679570Z",
     "start_time": "2025-06-11T00:32:17.657177Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def train_and_evaluate(model, X_train, y_train, X_test, y_test):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    acc = accuracy_score(y_test, y_pred)\n",
    "    cm = confusion_matrix(y_test, y_pred)\n",
    "    return acc, cm, y_pred\n",
    "\n",
    "# MNIST\n",
    "svm_mnist = SVC()\n",
    "acc_m, cm_m, y_pred_m = train_and_evaluate(svm_mnist, X_train_m, y_train_m, X_test_m, y_test_m)\n",
    "print(f\"MNIST SVM准确率: {acc_m:.3f}\")\n",
    "# CIFAR-10\n",
    "svm_cifar = SVC()\n",
    "acc_c, cm_c, y_pred_c = train_and_evaluate(svm_cifar, X_train_c, y_train_c, X_test_c, y_test_c)\n",
    "print(f\"CIFAR-10 SVM准确率: {acc_c:.3f}\")"
   ],
   "id": "fa3c01a8a689638f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST SVM准确率: 0.886\n",
      "CIFAR-10 SVM准确率: 0.374\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 可视化分析",
   "id": "f30602f7f6346c35"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:32:26.102092Z",
     "start_time": "2025-06-11T00:32:25.704580Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 准确率柱状图\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.bar(['MNIST', 'CIFAR-10'], [acc_m, acc_c])\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('SVM在不同数据集上的准确率')\n",
    "plt.show()\n",
    "# 混淆矩阵\n",
    "fig, axes = plt.subplots(1,2, figsize=(12,5))\n",
    "axes[0].imshow(cm_m, cmap=plt.cm.Blues)\n",
    "axes[0].set_title('MNIST 混淆矩阵')\n",
    "axes[1].imshow(cm_c, cmap=plt.cm.Blues)\n",
    "axes[1].set_title('CIFAR-10 混淆矩阵')\n",
    "for ax in axes:\n",
    "    ax.set_xlabel('Predicted')\n",
    "    ax.set_ylabel('True')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "id": "3e971e2fa8a581bf",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22312 (\\N{CJK UNIFIED IDEOGRAPH-5728}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19981 (\\N{CJK UNIFIED IDEOGRAPH-4E0D}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21516 (\\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25454 (\\N{CJK UNIFIED IDEOGRAPH-636E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19978 (\\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ],
      "image/png": "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CEgAAAwISAAADAhIAAAMCEgAAAwISAAADAhIAAAM3A7IJ554Qh9++CF3wwYAXNbcvli5n5+fZs6cqaqqKsXHxyshIUF9+/aVh4fHhagPAABLuH0EOWvWLH344Yd6+eWXZbfbNX36dPXr10/z5s3Tvn37LkCJAAC0vCZ9Bunh4aFbbrlFycnJysrK0qhRo/T222/rvvvu04ABA7R06VJVVFQ0d60AALSYJt0P8vTp03r//feVlZWlHTt2KDg4WL/5zW+UkJCg4uJiLViwQLt379ayZcuau14AAFqE2wH56KOP6qOPPpK/v78GDx6slStX6sYbb3Qu7969u06ePKmZM2c2a6EAALQktwMyKChIS5cuPeuJOdHR0crIyDjv4gAAsIrbn0E+/fTT+uKLL7Rp0yZn23/8x39o1apVzsft27dX165dm6dCAAAs4HZAvvjii1qyZImuvPJKZ1vfvn316quv6pVXXmnW4gAAsIrbAblmzRq9+OKLiouLc7YlJiZqwYIFeuutt5q1OAAArOJ2QJaVlcnPz69ee0BAgH788cdmKQoAAKu5HZB1FwUoKipyth07dkypqamKjY1t1uIAALCK2wGZnJysqqoqDRgwQDExMYqJidGdd96p2tpaJScnX4gaAQBocW5/zSMwMFCrV69WQUGBvv76a9ntdnXp0kXdunW7EPUBAGCJJl1Jp7q6WgEBAfL395ckORwOffXVV/q///s/JSQkNGuBAABYwe2AzM7O1qxZs3TixIl6y9q3b09AAgAuC25/Brlw4UINGjRImzZtkr+/v1avXq0lS5aoU6dO+t3vfncBSgQAoOW5fQR55MgRLV26VJ07d1avXr1UXFysgQMHytPTU/Pnz9eIESMuRJ0AALQot48g/f39VVZWJkm6/vrrVVBQIEm64YYb9O233zZvdQAAWMTtgLzjjjs0Z84cHTp0SH379tX69et14MABvfXWW+rQocOFqBEAgBbndkDOnDlTISEhys/P18CBA9W7d2+NGjVK6enpeuKJJy5EjQAAtDi3P4Pctm2b/vCHPyggIECStGDBAqWkpMjb21tXXHFFsxcIAIAV3D6CnDNnjkpKSlza/Pz8CEcAwGXF7YDs27evNm7cqMrKygtRDwAAFwW3p1i///57vfrqq1qyZIkCAwPl7e3tsvy9995rtuIAALCK2wE5ZswYjRkz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YICxr5+fn5KSkvT2228rNzf3nOuOiYlRenq6YmJilJOTo6eeekr9+/fX3LlzG3UrGqA51M14XH311W6PffjhhxUZGen8iYuLcy7buHGjQkNDdd1116l9+/bq06eP1q1bV28dQ4YMcY7v1auXpk+frsTERI0fP75Jz6fuEp3ne4tA8BkkzmHAgAGaOnWqqqur9fHHH6t79+5q165dg/0HDx6sv/zlL0pJSVFGRsY51x8ZGalXXnnFeXJCZmam0tPT1blzZ+dlB4ELqW3btpLOnMXqrmeeecblpgl1N1qorKzUu+++6/LZZXx8vFJTU1VUVKSOHTs6219//XUFBwerqKhIc+fOVY8ePTRp0iTnFGtycrI2bNjg7L9p0yaX8T9VN01sukUgnz+6hyNInFVUVJSkM3dayc7O1qBBg845Jjk5WYcOHdKf//znBvucPn1ac+fOdU75eHt7q1+/flq4cKESEhL00UcfNc8TAM6hc+fOuvrqq3XgwAHj8kcffbTB/TE4OFghISHOn+uuu06StH37dv3www967bXXFBYWprCwMM2fP18Oh0Pr1693WUfHjh0VEhKiW2+9VUuXLtW2bduUmprqXD5t2jRlZmY6f851m7+2bdvK29vb5RaB1dXVOnHiBCe4uYmAxFnZ7XbdcccdysnJ0fvvv9/g54//LiQkRBMnTtRLL73kcoLPv/Px8dGGDRuUlZVVb9nVV1+twMDA864daAy73a6EhASlp6fXO+rKyclRTk6OW/eelaTNmzfrhhtu0Pr1653Btn79et18883KzMxscFznzp01ZcoUvfnmm9q/f78kqV27di4hfK4b/Xp6eioiIkJ79uxxtu3bt092u109evRw63m0dgQkzmnAgAHKyMhQu3btnH8hn8vEiRMVGBjY4LSVzWbTpEmT9Mc//lGvv/66vvzyS33++edavny5NmzY0OBp9cCFMGXKFJ06dUrjx4/X7t279c033ygjI0NPPvmkEhMT1a1bt0avq6ysTDk5ORo1apS6d+/u8nP//ffr66+/1t69exscn5iYqK5du57XZ/Fjx47VsmXLlJ2drdzcXKWkpGjMmDFMsbqJzyBxTrGxsaqurm7U0WMdLy8vJScnn/VEg/Hjx6tNmzZatWqVXnvtNUlSr1699MYbb6hXr17nXTfQWO3bt9eqVau0aNEiTZ8+XSdOnFDnzp01depU3XfffW6tKycnR1VVVcbvAw8cOFDt27fXunXrNHHiRON4u92up556Sg899JDWrFmj0aNHu/187rnnHn333XdKTk5WZWWl4uPj9fvf/97t9bR23O4KAAADplgBADAgIAEAMCAgAQAwICABADAgIAEAMCAgAQAwICABADAgIAEAMCAgAQAwICABADAgIAEAMCAgAQAw+H/gVonFVG//ZwAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_13864\\2676545603.py:16: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) Arial.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_13864\\2676545603.py:16: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) Arial.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_13864\\2676545603.py:16: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) Arial.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_13864\\2676545603.py:16: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) Arial.\n",
      "  plt.tight_layout()\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBYAAAHqCAYAAACwSs1vAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAdklEQVR4nO3de5zUdb0/8PfMLMtyVxFNsFAUOaR4A69HEtHSzEy7eLBCyZI0y6Nlqah4oUSlrF9S+jPl6El/al4yPVpqRzM1jiWJSYkHBS3FkEoobrvszPz+0F3FG7tfPuN3p30+H499wM7lPe/5zne+3/e85juzhWq1Wg0AAACADIp5NwAAAADUL8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAryJiRMnxogRI2LChAlveZmTTz45RowYEaeddlr7aePHj49dd901Fi9e/KbXGTFiRFxyySXtv5922mkxfvz4dS6zatWquOSSS+Lggw+OHXfcMUaPHh0TJkyIG2+8MarVakREPPfcczFixIj1/jz88MMbshgAgG7i8ccfj69+9asxbty42HHHHeOAAw6Is846K/70pz+tc7lLLrkkRowY0f77+maSQw45ZJ3rVyqVGDduXIwYMSLmzZv3pr2MHz/+DXVGjhwZu+22W3zyk5+MX/7yl526b62trXHEEUesM4O1WblyZZx77rnxr//6r7HLLrvEscceGwsXLuxUfSCiIe8GoKsqFosxd+7c+POf/xzvete71jlv1apVcd99973p9VauXBlnnnlmzJo1q9O3Wa1W47jjjouFCxfG5MmTY/jw4dHc3BwPPvhgnHXWWbFgwYKYMmVKbLbZZnHDDTe0X2/p0qXxxS9+MY4//vgYN25c++nbbrvtW97WhRde+La97LPPPvGv//qv7b8/9NBD8eCDD77tdU499dR3/DYAgA1z7bXXxvnnnx977LFHfOUrX4nNNtssnn322bjyyivj7rvvjquvvjr+5V/+5W1rvH4GadPU1LTO7w899FD85S9/iWHDhsX1118fX//619+03r777htf+MIX2n9vbW2NP/7xj3H55ZfHF77whbjpppvW21NERHNzc3zta1+Lxx57LMaOHfuG87/yla/EY489Fl/96lejb9++MXPmzDjqqKPijjvuiAEDBrxl3TvvvDMef/zxtzx/wIABcdxxx7X/Xi6X45xzzom+ffu+5XUOPvjgGDVq1Dt6G5CKYAHewnvf+9546qmn4mc/+1lMmjRpnfPuu+++6NWrV/Tv3/8N1+vfv3889NBD8aMf/SiOOOKITt3mnDlz4uGHH45Zs2at84J73LhxUSwW45prroljjz02Bg0aFDvvvHP7+c8991xERLznPe9Z5/S3M3bs2Nh7773f8vxf/epX6/xeKBTe9kX96y//Tt0GAJDdnDlz4hvf+EZ86lOfijPOOKP99D322CMOOOCAOOyww2LKlClxyy23vG2djs4gt9xyS+yyyy4xduzYuPTSS+O000570xfCm2yyyRvqjRkzJnbaaac4+OCD47bbbltvsPDII4/EeeedF0uWLHnT8x999NG477774vLLL4999923/Tb233//+H//7//F8ccf/5a1N9poo07NLNVqNQ455JDYY489Onydd+I2IBUfhYC30Lt379h3333jZz/72RvOu/POO+PAAw+MhoY3ZnPjx4+P3XffPS688MJ44YUXOnWbS5cujYiXDxN8vU9+8pNx8sknR6FQ6FRNAIC3cuWVV0a/fv3iy1/+8hvO22STTeK0006L/fffP1atWrXBt7V8+fL4+c9/Hvvtt18ccsghsXr16vjJT37SqRptb+p0ZB46/vjjY/DgwW8Zijz44IPRu3fv2GeffdpP22STTWK33XaL+++/v1N9QXcnWIC3cfDBB7d/HKLNihUr4pe//OUbPjPYplAoxPnnnx+VSiXOPPPMTt3e7rvvHr17944vf/nLMWPGjHj44YdjzZo1ERGx1VZbxbHHHhubbrpp9jsEAPCKarUaDz74YOy1117Rq1evN73MwQcfHCeccEL07t37bWtVKpVobW1d56dcLq9zmdtvvz3K5XJ8+MMfjsGDB8eee+65zkc7X9/ba2utXr065s+fH6eeemr06NHjLeew17rmmmvisssuiyFDhrzp+U8//XRsueWWUSqV1jn9Pe95TyxatGi99YFXCRbgbYwbNy569eq1zlEL99xzTwwcODBGjx79ltd797vfHV/+8pfjwQcfjBtvvLHDtzdw4MD4wQ9+EAMGDIgrrrgijjrqqBgzZkx8+tOfjh/96Edv2EEDAGT10ksvRXNzc2y55ZYbXOuMM86I7bfffp2f13+U4ZZbbon3ve99MWjQoIiI+OhHPxpPPvlk/Pa3v31DvVtvvfUNtT72sY/FypUr48orr4yRI0eut6fXfsnkm/nHP/7xph/D6NOnT6xcuXK99YFX+Y4FeBtNTU0xfvz4db5n4Y477ogPfvCD6z0E79Of/nTcddddccEFF8TYsWPf8AWQb2XMmDFx9913x5w5c+LBBx+MX//61zF37tz4zW9+E7feemvMmjXrDV+EBADQWW3v1Kd44+KLX/ziG768sVh89T3M+fPnx+9///v49Kc/HX//+98jImLPPfeM3r17xw033BC77rrrOtfdb7/94oQTToiIiD/+8Y8xY8aM2HzzzWPmzJntwURb721/NSvi5SNHX38Ewlt57fVez0dPoXMcsQDr8cEPfrD94xAvvfRSzJ49Oz70oQ+t93ptH4kol8ud/khEsViM3XbbLU4++eS47rrr4qGHHoojjzwy5syZEzfddFPWuwIA0G7AgAHRp0+ft/wz2REv/yWs5cuXr7fWkCFDYtSoUev8bL/99u3nt80vp59+euy2226x2267xdixY2PVqlXx05/+9A23sdFGG7XX+dCHPhRXXHFFzJ8/P4499thoaWlpv9ykSZPWObLh9V+4/Xb69u37pkcmrFy5Mvr169fhOoAjFmC93ve+90WfPn3iZz/7WfTu3Tu23HLL2GGHHTp03fe85z1x8sknx/nnn9+hQOCkk06KZcuWxVVXXbXO6QMGDIipU6fGnXfeGU899VSWuwEA8Ab77LNPPPzww9Hc3Bw9e/Z8w/k/+tGP4sILL4ybbrppnaCgM1paWuL222+PD3zgA/HpT396nfOee+65mDJlSvz4xz9+21Bg2223jRNPPDEuuuiimDlzZvuXTZ577rnrhAN9+vTpcF9bb711PPjgg1GpVNY5uuLZZ5+NbbbZpsN1AEcswHo1NjbGAQccEHfddVf89Kc/7dDRCq81ceLEGD16dFxwwQXrvezQoUPjf/7nf2Lu3LlvOO/FF1+MVatWxXbbbdep2wcAeCvHHHNMLFu2LL7zne+84bylS5fGrFmzYtttt80cKkRE3HvvvbFs2bKYMGFC7LHHHuv8fOxjH4utttrqLb/E8bWOPvro2G677WLWrFnxzDPPRETEsGHD1jlKYtiwYR3ua5999omVK1fGAw880H7a3/72t3jkkUfW+bPfwPoJFqADDj744Hj00Ufj4Ycf7nSwUCwWY/r06bF27dr1XvaYY46JbbbZJj7zmc/EjBkz4pe//GX85je/iWuvvTY+9alPxfDhw+OjH/1o1rsBALCOnXfeOf793/89Zs2aFZMnT44777wzZs+eHf/5n/8ZH//4x6O5uflNQ4fOuPnmm2PgwIGx5557vun5hx56aCxcuDAefvjht63T0NAQU6ZMibVr18b555+/QT1FROy2226x++67x1e/+tW48cYb45577olJkyZFv3794sgjj9zg+tCd+CgEdMDee+8d/fv3jy222CLToXFDhw6Nk08+OaZPn/62lxswYEDccMMN8YMf/CDuvffeuO6662Lt2rUxZMiQOOSQQ2Ly5MnJvrjxzjvvXCehf70dd9xxnd+XL18eF1544Vte/h//+Efsvffe7/htAAAb5vjjj4/3vve9ce2118b5558fy5cvjy222CLGjRsXxx13XGyxxRaZay9ZsiQeeuihmDBhwlt+qeJHPvKRuOSSS+L666+PPfbY423r7bXXXnHggQfGXXfdFffdd1/st99+mXuLiJg5c2ZccMEFcdFFF0WlUoldd901vvOd78SAAQPe9np//OMf33bGKRQKb5hZrrvuuvjFL37xltcZO3bsO34bkEqh+nZfhwoAAADwNnwUAgAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZg15N5BVpVKJ1tbWKBaLUSgU8m4HgDpXrVajUqlEQ0NDFItyd+qP2QiAlDozG9VtsNDa2hqPP/543m0A8E9m1KhR0djYmHcb0GlmIwBqoSOzUd0GC22JyTfnlqOlsuH1GosRp+xcSlavzX8eNTpdsRooV6pp65XLsfDJeTFsxA5RKpWS1CwVu9e7LuVyORY88XgMHzkq2TJM/TjXQsrHuRbLsLvpjsuw7T47WoF61bbuTv3V6mgub3i9nqWI8/bulaxem6u6+GzUp2fa8bhSLsczC34fWw3fPoqJtqdrWxMOqzXSoyHdtrS7LsMVza3JalUr5Vj2/ILYaMjwKBTT7dc37tP1g/hfL/pbslqFaiUGtiyOvzYOjmohzTq+ppzucU6tUK3EkPKLHZqN6jZYaDvEr6US0Zxwu5C6XpcfyAu1ecFZKpUECxso5TKs1eOcUi0e56TLsJvqjsvQIeTUq7Z1t7kcSYOA1PWKCV/U1EKttnnFhNvTcrXrb6dKpfQhbXdbhsViuvmt7eVNoVhK+hyshxkhVQDw+pqp6taiv9Q6Mht1/XsBAAAAdFmCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMgs12Chubk5pkyZEmPGjIl99tknZs2alWc7AAC5MhsBUI8a8rzxiy66KObNmxdXX311LF68OE499dQYPHhwHHTQQXm2BQCQC7MRAPUot2Bh1apVceONN8YPfvCD2H777WP77bePBQsWxLXXXmvnCQB0O2YjAOpVbh+FmD9/frS2tsYuu+zSftro0aPjsccei0qlkldbAAC5MBsBUK9yCxaWLl0aG2+8cTQ2Nraftummm0Zzc3MsW7Ysr7YAAHJhNgKgXuX2UYjVq1evs+OMiPbfW1paOlynMVE00lYnVb025XI5bcHEypVq2nqv3N+k97taSFerDtRiGaZ+nGsi4eNck/Wwm+mOy7A73Ve6plSzUc9Smn7a6qSq16ZS6drPtXI57dxReWXbUkm4jamUu/4RLOVCutmjuy7DlM+V6iu1qpVypLzn9bDvLFTT3eO2WrWo2RV1prfcgoWePXu+YSfZ9ntTU1OH65yyc9q9Xep68+fNTVqvXix8cl7eLdS9BU88nncLdc8y3HCWIbxzUs1G5+3dK2lfqestWfSHpPXqxTMLfp93C3XPMtxwy55fkLTeS0mr1camNag5sGVxDarWt9yChc033zxeeumlaG1tjYaGl9tYunRpNDU1Rf/+/Ttc55tzy9GSIORpLL4cKqSq1+Y/jxqdrlgN1OKIhYVPzothI3aIUilNSFMqdr8jFhY88XgMHzkq2TKshyMWUj7OtViG3U13XIZt9xnykmo2mvqr1dGc4E3EnqWXQ4VU9dpc1cVnoz49047HlXI5nlnw+9hq+PZRTLQ9Xdvadd/hbNOjId1hwN11Ga5obk1Wq1opx7LnF8RGQ4ZHoZhuv75xn8b1Xyhnv170t2S1CtVKDGxZHH9tHBzVQpp1fE053eOcWqFaiSHlFzt02dyChZEjR0ZDQ0PMnTs3xowZExERc+bMiVGjRkWx2PEHqaUS0Zxwu5C6XpcfyBMepvZapVJJsLCBUi7DWj3OKdXicU66DLspyxDeOalmo+ZyJA0CUtcrJnxRUwu12uYVE25Py3XwMdFSKf1XuXW3ZVgsJvw4ySv/FoqlpM/BepgRUgUAr6+Zqm4t+stDbveiV69ecdhhh8U555wTv/vd7+LnP/95zJo1K4466qi8WgIAyI3ZCIB6ldsRCxERp59+epxzzjlx9NFHR9++feNLX/pSfOADH8izJQCA3JiNAKhHuQYLvXr1igsvvDAuvPDCPNsAAOgSzEYA1KN/jg90AAAAALkQLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkFlD3g1sqP88anSUSqUNrlMul2P+vLnJ6rXZeLcvJqtVCy/9ZmbagtVCRESUioUoFQtpa5OZxwKg+7jx2D2SzUYL5/8uWb02k294LFmtWpj5sVFJ61XKlYiIWNtaiXK1++yPW1oryWrVYhn2ber6L4NS9lgul+OlP0VsPqAp6fN5xZrWZLVqZcchA5LVqlTKsWRRxPaD+0exmGY5/u755Unq1EKhWono4EPsiAUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzBrybuCf3Uu/mZl3C29rxFduT1qvV49CXHvkFjH6jJ/G6rXVJDWf/NaHk9SBDdXSWsm7hfUqFQtJ6pQr1Vf/LaR5Lnd1bfcZ6t3zf1sVhWJpg+tUK+Wk9drM/NioZLVq4Ys3P560XmOxGv/+3ohTbvt9tFTSbKOnHTQiSZ1aSrnPbFsXX/z7mmTr4pLlScrUjbZluOjFFUmfz9ts3jdZrVpJuS6Wyy8/h/v0bIhSKc1yHDdiUJI6tVAul2P+vOc6dFlHLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMgs12BhyZIlceKJJ8buu+8eY8eOjenTp0dzc3OeLQEA5MZsBEA9asjrhqvVapx44onRv3//uPbaa2P58uUxZcqUKBaLceqpp+bVFgBALsxGANSr3I5YWLhwYcydOzemT58ew4cPjzFjxsSJJ54Y//Vf/5VXSwAAuTEbAVCvcgsWBg0aFFdccUVsuumm65y+YsWKnDoCAMiP2QiAepVbsNC/f/8YO3Zs+++VSiWuueaa2HPPPfNqCQAgN2YjAOpVbt+x8HozZsyIP/zhD3HTTTd16nrlcjnJ7bfVSVWvXvTqUUhbr6Gwzr8pdLfHpLuuiynVahmWy5Wk9Wqimua51x3Xw+50X6kPWWejaiXNtqqtTqp6bSpd/LnWWKzWpF7KutVK116GEWnXm1qti91JrZZhPew7U85vbduvlNuxciHtNielzjy+hWq1mvs9mTFjRvzHf/xHfPvb344DDzywQ9cpl8sxd+7c2jYGQLez8847R6lUyrsNujmzEQBdRUdmo9yPWJg2bVpcd911MWPGjA7vOF9r+MhRSQbAcrkcC554PFm9ejH6jJ8mrderoRBXfOJd8bkb/xyrW9NkVnO+8cEkdepFd10XU6rVMmxp7frvlJSK6Y5YWPjkvBg2Yodusx623WfI24bORo2bDotCccM/7VqtVKLlLwuT1WuzWf+mZLVq4ZTbfp+0XmOxGsf/S8Sl8yNaKmm20WceMDxJnVpKuc+s1brYndRqGW69Wd9ktWol5bpYKZfjmQW/j62Gbx/FRPNRY0PXXafbZuqOyDVYmDlzZlx//fVx8cUXx0EHHZSpRqlUSjr0pq7X1a1eW5sDVla3VpPV7k6Px2t1t3WxFpJvHxJ9zKCWUgUL7fWsh/COSjEbFYrFKBTTPW9T10s1jNdKqhf/66pGS6WQrHbKx6NWCon3Ry/XTLsudkepl2E9zAi1mN+KCeejUqnrBgudkVuw8PTTT8f3v//9mDx5cowePTqWLl3aft6gQYPyagsAIBdmIwDqVW7Bwn//939HuVyOSy+9NC699NJ1znvyySdz6goAIB9mIwDqVW7BwuTJk2Py5Ml53TwAQJdiNgKgXv1zfKADAAAAyIVgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzBryboB8/XraQUnrVcrlWLzw93HfGQdEsVRKUnPiD3+bpE4t/XDirnm3ABERUSoW0hSqFtrrJavZ1VW7yf3kn95GfRqjWNzwfXClUo4lCeu1WbGmNVmtWjjrgOFJ61Ur5Wh+8an42rhtopBoOf5tRUuSOrW0Sd/GZLWqlWo0R0RjQzEKxTTvi/5+yfIkdWpp6IA+yWpVK5WIiGhprUQh4X69pbWSrFatNDakey+9XKi21yyV0tT987I1SerUQqVS7vBlHbEAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMisIe8GyFepWEhar1AttNctJqr9w4m7JqlTS7tOvTtZraaGQvzgI5vE2G/cG2taq0lq/va8DySpU0vlSpr7+tpa5Uo1opCubmODLHZDtbRW8m7hLZXLXbc36IzGUjGKpQ3fXlXK1aT12nT1ben8Jf9IWq9QrcSmEfH88jVRLaS57+NGDEpSp5aeeP7vyWpVK+WIiFixpjUKxTT79fHbbZ6kTi3d+79LktUqVCuxZUT86e+rkq2HERGbD2hKVqtW+jale8nbNiu0tFaiVE3zWqcrbxMrnZjPu+69AAAAALo8wQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJl1mWBh8uTJcdppp+XdBgBAl2A2AqBedIlg4Y477oj7778/7zYAALoEsxEA9ST3YGHZsmVx0UUXxahRo/JuBQAgd2YjAOpNQ94NXHjhhfGRj3wkXnzxxbxbAQDIndkIgHqTa7Awe/bseOSRR+L222+Pc845J1ONcrmcpJe2Oqnq1YtK4vtbqZTX+TeFcrmQrFatNDWk67Gp4bX/pqlbD+t1uVJNV6tWz+dq118XU6nVMiyXK0nrpZR6ewhZpJiNUu2Da7FPrweFatrtVFu9lHXrYb9eTbjeVF9ZdtVqJSLRYqyHZZhynanFehhRH9uHlK8l2maFlDNDV16Gnektt2Chubk5zj777Jg6dWo0NTVlrrPgiccTdpW+Xnf1/MIn8m7hHfWDj2ySvOYlH0pXc/68uclq1ZOFT87Lu4W6Z5sI75xUs1HqfXB326dvWqO6A1sWJ6s1f95zyWrVlZeeiVRvQyz8W6JCNbRlDWoOKac9EmrJoj8nrVcvnlnw+7xb6HJyCxZmzpwZO+ywQ4wdO3aD6gwfOSpKpdIG91Mul2PBE48nq1cvVq5pTVqvUinH8wufiCHDRkaxmGY59mnK/RM76zX2G/cmq9XU8HKo8KU7/hapHp4HzhifplANpT5iYeGT82LYiB2SPp9Lxe51xEIttoktrV37iAWDAnlKNRul2gfXYp9eDx7907Kk9QrVSgxsWRx/bRwc1UKarzfbZ3it4o90nlz892S1qtVKxEvPRGy8VRQSLcOtN+ubpE4t/fKpdCFAoVqJIeUX4/nSZsnWw4iI0e9O/+Zaan16pnst0TYrbDV8+ygmmo9WNqd9PZZSpVKOpc8+2aHL5vaK7Y477oi//OUvscsuu0REREtLS0RE3HXXXfHoo492uE6pVEr7wiFxva6uWEr3Ym6dusVSsidbPTwea1pTLsfCKzXT1a2HZRiF9Oti8u1DNwoW2iRfht3o4yTQWalmo5T74FrU6+pSvuh6fd1Utethv15IGUZVIqoRUSgUk9Wth2VYi3Ux5XoYEXUROtbisS4mnI+Kxdq8Hnun5RYs/PCHP4zW1lfTmW9+85sREXHKKafk1RIAQG7MRgDUq9yChSFDhqzze58+fSIiYujQoXm0AwCQK7MRAPWqNsd6AQAAAN1Cl/lWvAsuuCDvFgAAugyzEQD1whELAAAAQGaCBQAAACCzTMFCuVyOX/ziF3HVVVfF3//+93jsscfiH//4R+reAADqgtkIgO6s09+x8MILL8RnP/vZWLZsWSxfvjz233//uOKKK+LRRx+NK6+8MkaMGFGLPgEAuiSzEQDdXaePWDjvvPNi9OjR8cADD0RjY2NERFx88cWx9957x9e//vXkDQIAdGVmIwC6u04HC4888kgcc8wxUSqV2k/r0aNHfOELX4h58+YlbQ4AoKszGwHQ3XU6WGhqaoq//vWvbzh90aJF0bdv3yRNAQDUC7MRAN1dp4OFCRMmxNSpU+MXv/hFRLy807z55pvjrLPOio9//OOp+wMA6NLMRgB0d53+8sYTTjgh+vfvH+ecc06sXr06Jk+eHAMHDoxJkybFZz/72Vr0CADQZZmNAOjuOh0sRERMnDgxJk6cGKtWrYpyuRz9+vVL3RcAQN0wGwHQnXU6WLj11lvf9vzDDjssYysAAPXHbARAd9fpYOG73/3uOr+Xy+X461//Gg0NDbHjjjvaeQIA3YrZCIDurtPBwr333vuG01auXBlTp06NESNGJGkKAKBemI0A6O4yfcfC6/Xp0ye+9KUvxZFHHhmTJ09OUbLDypVqRKGapk7Cem1KxUKyWrXQ2NDpPwzytsqvLLseDcUoldLUbntsurLfnPP+ZLXK5XIs+MNj8YvT91vnb6JviPEX/zJJnVq698vvS1es+vLzrlQsdPnnYHfTpR+PahfujbqT52yUah9ci316PXj3Rr2S1qtWytH8YsSQAU1RKKbZr18z59kkdWrpgG02T1arUinHS3+L2KhPYxQTLcN7/3dJkjq1NHxguu9qaVsPt9mkb7L1sF6sWNOarFalUo6IiJXNrVEspnmNsknfxiR1aqFcLkdHnynJ9hLz58+PSqWSqhwAQF0zGwHQXXT6iIWJEydGobDuuzorV66MJ598MiZNmpSqLwCAumA2AqC763SwsMcee7zhtMbGxjjllFNir732StIUAEC9MBsB0N11OlhYtmxZHHXUUfGe97ynFv0AANQVsxEA3V2nv2Phtttui2Kx+3yBDwDA2zEbAdDddfqIhUmTJsW5554bkyZNisGDB0fPnj3XOX/w4MHJmgMA6OrMRgB0dx0KFn7zm9/ELrvsEg0NDfHd7343IiIeeOCBiIj2LyuqVqtRKBTiiSeeqFGrAABdg9kIAF7VoWDhqKOOigcffDAGDhwY//3f/13rngAAujSzEQC8qkPBQrVabf//kCFDatYMAEA9MBsBwKs6/E1Dr//7zAAA3ZnZCABe1uEvb/zYxz7WoW88djggANAdmI0A4GUdDhY+85nPRL9+/WrZCwBA3TAbAcDLOhQsFAqF+NCHPhQDBw6sdT8AAF2e2QgAXtWh71h47RcUAQB0d2YjAHhVh4KFww8/PHr27FnrXgAA6oLZCABe1aGPQkyfPr3WfQAA1A2zEQC8qsN/bhIAAADg9QQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZNeTdAPla3VJOWq9SfrnempZyFEtpag7o3SNNoXpRLURERKlYiFKxkKTkPSeNTVKnlj7/o98lq9VYrMZxwyNO+vG8aKmkWYYREf/3iB2T1equUq3TNVHtwr1BJ6xtrUQ5wfpcKVeS1mvT2NC139dqaa0krVetVNrrFhJtA4/Y6d1J6tTSr57+a7JahWolNo2IBS+uiGohzfozfrvNk9Sppa0/f0OyWr0bi3HrcdvGB8/7WaxqSbeOP/m9TySrVSt9m9K95C2Xy7EkIjbu0xilUpoXOyvWtCapUwttr+06omtv2QEAAIAuTbAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmuQYLLS0tce6558Zuu+0We++9d1x88cVRrVbzbAkAIDdmIwDqUUOeN/71r389Hn744bjyyitj5cqVcfLJJ8fgwYNjwoQJebYFAJALsxEA9Si3IxaWLVsWN998c0ybNi123HHH2GuvveKYY46Jxx57LK+WAAByYzYCoF7ldsTCnDlzom/fvrH77ru3nzZ58uS82gEAyJXZCIB6lVuw8Kc//SmGDBkSt956a1x22WWxdu3a+OhHPxrHH398FIsdP5CiXC4n6aetTqp67aqFtPUSqyS+v5VKeZ1/UyiXu9d3jNZiXSxXuv7ncxuL6Xrs8UqtHglrRtRg+9CF1Wyb2IV1p/tK15RqNkq1D67FPj0iolzo2vukauL7W61WXv23kqZmPWyvCtVEd/Y1tVLWrIdl2Lsx3Qzcq0fhNf+mq5v6tUQtlMvpXo/VYj7qysuwM9v/QjWnbwT6/ve/H1deeWUMHz48Tj311Fi6dGlMnTo1Jk+eHMccc8x6r18ul2Pu3Lm1bxSAbmXnnXeOUqmUdxt0Q2YjALqijsxGuR2x0NDQECtWrIhvfetbMWTIkIiIWLx4cVx33XUd2nm2GTZihyQDYLlcjoVPzktWr02p2LWPWPj7qrVJ61Uq5fjzM/PjXVv9SxSLaZZj/949ktSpF+VyORY88XgMHzkq2bpYD0csfOUnv09Wq0exGp/dphxXPl2KtZV0z8HvHL5DslpdXS3Ww66u7T5DXlLNRkOGjUyyD65UyvH8wieS1WvTo6FrH4m46MUVSetVq5WIl56J2HirKBTS3PetN+ubpE4t/XrR35LVKlQrMbBlcfy1cXBUEy3D3bfeJEmdWtrxpFuS1erVoxDXfXabOPLKp2P12nRz4ZxvHpasVq30aUr3krcW89HKNa1J6tRC236gI3ILFgYNGhQ9e/Zs33FGRGy99dbxwgsvdKpOqVRKGwSkrtfFg4ViKd0hZevULZaimGg5dpcXNa+XdF3s4oedRkS0JAwA2qytFJLW7Y7rYuptIvDWUs1GKffBtahXKnXtYKGQMESJiIhKRDUiCoVistr1sF1OFQC8vmaquvWwDFe1pJzTX15uq9dWk9ZNuW2olVo81inno2Kp68/pHZHbln2nnXaK5ubmWLRoUftpCxcuXGdnCgDQXZiNAKhXuQULw4YNi3HjxsXpp58e8+fPjwceeCAuv/zyOPLII/NqCQAgN2YjAOpVbh+FiIj45je/GdOmTYsjjzwyevXqFZ/61Kdi4sSJebYEAJAbsxEA9SjXYKFfv35x0UUX5dkCAECXYTYCoB517W/PAQAAALo0wQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJk15N3AhioVC1EqFja8ULWQtl6dKFeqSetVqi/XK1erUU1cm+zqYZ3+v0fsmKxWuVyO+fPmxncO3yFKpVKyugd//1fJatXKnV/YO+8W3lbqbU5KXbk36IyWciWK1Q3f7lcqlaT12qxY05qsVi30bUo7HlcrhfjHK3ULxTT7pCXL1ySpU0v/snm/ZLUqlXK89KeI4Zv1jWKiZfi3FS1J6tTSL8//cLJa1Uo5ml98Kn469aBk62FExIMLlyarVSvjt9s8Wa1y+ZXtYmslSom2i115m1iplDt8WUcsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAya8i7gQ1VrlQjCtU0dRLWqxd9m9KuAuVyISIi+vRsiFKplLR2V9a2/qSs1d3WxVKxkHcL63XnF/bOu4X1OvOn85PUaShU4xNbREy753+jtZrusZn6/u2S1Uot5fMY8vT831ZHFBK8d1StREPKeq9498DeyWrVwrs2akpar1wux/zFEUM26Z1sNmpprSSpU0spe6yUC/FSRPTt2RDFbrQM37VR32S1yuVyzH8xYuvN+iad0bv68zkiYvO9TkxWq3dTj7h75qdj2wO+FqvWrE1S83c/uyhJnVqoVjr+PHHEAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmeUaLLzwwgvx+c9/PnbdddcYP358XHXVVXm2AwCQK7MRAPWoIc8bP+mkk2Lw4MFxyy23xFNPPRWnnHJKDBkyJN7//vfn2RYAQC7MRgDUo9yOWFi+fHnMnTs3jj/++Nhqq63igAMOiLFjx8bs2bPzagkAIDdmIwDqVW7BQlNTU/Tq1StuueWWWLt2bSxcuDB++9vfxsiRI/NqCQAgN2YjAOpVbsFCz549Y+rUqXHDDTfETjvtFB/84Afjfe97X3ziE5/IqyUAgNyYjQCoV7l+x8LTTz8d++23X3zmM5+JBQsWxLRp02KvvfaKQw89tMM1yuVykl7a6qSqVy/KlWrSepVXll8l4XIsF9L2WAspl2N3XRejWkhWqtsuw4hoSPR8aauTql6brvyYpNxuQVYpZqOoVtI001YnVb1XVCpd+7mWejtVi31SuZz2MamFSsIe29aZlOtOpdL1l2HadaY2s1E9rIu9m3okr5WyZrULbxM701uhWq3m8qpt9uzZcdJJJ8X9998fTU1NERFx6aWXxm233RY//elP13v9crkcc+fOrXGXAHQ3O++8c5RKpbzboBsyGwHQFXVkNsrtiIV58+bF0KFD23ecERHvfe9747LLLutUnWEjdkgyAJbL5Vj45Lxk9epFLY5YeGbB72Or4dtHMdFybGzI9a+idkjqIxa647pYKqY9YmHBE4/H8JGjutUyjIiYds//JqnTUKjG4e9aHT/+c69oTXg0yan7bZusVmpt2y/IS6rZqLX/0IhCgn1ntRINf382Xb1XDNmkV7JatbBxn8ak9WqxT2pp7frvEq9N2GOlUo7nFz4RQ4aNjGIx0TKsg3faU66LtZqN6mFd3PaAryWr1bupR9z6zX+Lw065IVatWZuk5uxbzktSpxaqlXKs+PPTHbpsbsHCZpttFs8++2y0tLREY+PLT5qFCxfGlltu2ak6pVIp6ZMjdb0ur0YfMygmXI6lUtcPFmqxHLvbupgyWGiv2c2WYUQkDQHa6qWs2d0eD+iMVLNRFIpJg4DU9VK9MKyVWm2nUu6TSom39bVQrkGPxWIp2RtXxTpYhrVYF5O/dqqD5ZgqAHh9zVR1C118m9hRub1iGz9+fPTo0SPOPPPMWLRoUdx7771x2WWXxcSJE/NqCQAgN2YjAOpVbkcs9OvXL6666qr4xje+ER//+Mdjk002ieOPPz7+7d/+La+WAAByYzYCoF7l+lchtt122/iP//iPPFsAAOgyzEYA1KM6+PA6AAAA0FUJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyKwh7wY2VKlYiFKxsOGFqoW09epEuVLNu4V/CimXY1utcqUaUUhTt7FBhphCS2sl7xbW64z9hyepUymX45n/fTy+uu82USyVktSMiDjg4l8mq5VaUyni2wf0y7sN2GDbbdEvSgmet+VyORYuT1evzdNLViSrVQt9m9KOx+Xyy/uOltZKlKppZswVa1qT1KmlTfo2JqtVLr+83Po0NSRbF+thn56yx1qshxERS5avSVarVu664bx0xaqViBXPxo+vOiOikGa+3vNrP0lSpxZ6Nxbj1uO27dBlvdoAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyKwh7wayqlarERFRLpeT1Gurk6pevSiXK0nrVV5ZfpWEy7FcqCarVSspl2N3XYYp1er5nPr5UguVSprHuhbrYUREUylpuaR6vtJb2/4F6k3bupvqeVur7UC10rVnrdT7jlosx0oXX4YRaZdjLfbr9bBPT6m7Pp8jIqKa8LFuq5WwZu/Grvtef68ehYjo2GxUqNbpBNXS0hKPP/543m0A8E9m1KhR0djYmHcb0GlmIwBqoSOzUd0GC5VKJVpbW6NYLEahUMi7HQDqXLVajUqlEg0NDVEsdt13D+CtmI0ASKkzs1HdBgsAAABA/rwlAwAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8FCRDQ3N8eUKVNizJgxsc8++8SsWbPybqnuLFmyJE488cTYfffdY+zYsTF9+vRobm7Ou626NXny5DjttNPybqMutbS0xLnnnhu77bZb7L333nHxxReHv6rbOS+88EJ8/vOfj1133TXGjx8fV111Vd4tAe8ws9GGMxulZTbKzmy04cxG69eQdwNdwUUXXRTz5s2Lq6++OhYvXhynnnpqDB48OA466KC8W6sL1Wo1TjzxxOjfv39ce+21sXz58pgyZUoUi8U49dRT826v7txxxx1x//33x+GHH553K3Xp61//ejz88MNx5ZVXxsqVK+Pkk0+OwYMHx4QJE/JurW6cdNJJMXjw4LjlllviqaeeilNOOSWGDBkS73//+/NuDXiHmI02jNkoLbPRhjEbbTiz0fp1+yMWVq1aFTfeeGOcccYZsf3228f73//++NznPhfXXntt3q3VjYULF8bcuXNj+vTpMXz48BgzZkyceOKJ8V//9V95t1Z3li1bFhdddFGMGjUq71bq0rJly+Lmm2+OadOmxY477hh77bVXHHPMMfHYY4/l3VrdWL58ecydOzeOP/742GqrreKAAw6IsWPHxuzZs/NuDXiHmI02nNkoHbPRhjEbbTizUcd0+2Bh/vz50draGrvsskv7aaNHj47HHnssKpVKjp3Vj0GDBsUVV1wRm2666Tqnr1ixIqeO6teFF14YH/nIR2LbbbfNu5W6NGfOnOjbt2/svvvu7adNnjw5pk+fnmNX9aWpqSl69eoVt9xyS6xduzYWLlwYv/3tb2PkyJF5twa8Q8xGG85slI7ZaMOYjTac2ahjun2wsHTp0th4442jsbGx/bRNN900mpubY9myZfk1Vkf69+8fY8eObf+9UqnENddcE3vuuWeOXdWf2bNnxyOPPBJf+MIX8m6lbv3pT3+KIUOGxK233hoHHXRQ7L///vG9733PINwJPXv2jKlTp8YNN9wQO+20U3zwgx+M973vffGJT3wi79aAd4jZaMOZjdIwG204s9GGMxt1TLf/joXVq1evs+OMiPbfW1pa8mip7s2YMSP+8Ic/xE033ZR3K3Wjubk5zj777Jg6dWo0NTXl3U7dWrVqVTz77LNx/fXXx/Tp02Pp0qUxderU6NWrVxxzzDF5t1c3nn766dhvv/3iM5/5TCxYsCCmTZsWe+21Vxx66KF5twa8A8xG6ZmNOs9slIbZKA2z0fp1+2ChZ8+eb9hJtv1uI9Z5M2bMiKuvvjq+/e1vx3bbbZd3O3Vj5syZscMOO6zz7gad19DQECtWrIhvfetbMWTIkIiIWLx4cVx33XV2nh00e/bsuOmmm+L++++PpqamGDVqVCxZsiQuvfRSO0/oJsxGaZmNsjEbpWE22nBmo47p9sHC5ptvHi+99FK0trZGQ8PLi2Pp0qXR1NQU/fv3z7m7+jJt2rS47rrrYsaMGXHggQfm3U5dueOOO+Ivf/lL++dZ2wa4u+66Kx599NE8W6srgwYNip49e7bvOCMitt5663jhhRdy7Kq+zJs3L4YOHbrOi4f3vve9cdlll+XYFfBOMhulYzbKzmyUhtlow5mNOqbbBwsjR46MhoaGmDt3bowZMyYiXv6Sk1GjRkWx2O2/gqLDZs6cGddff31cfPHF/hRVBj/84Q+jtbW1/fdvfvObERFxyimn5NVSXdppp52iubk5Fi1aFFtvvXVEvPzN3K/dmfL2Nttss3j22WejpaWl/dDnhQsXxpZbbplzZ8A7xWyUhtlow5iN0jAbbTizUcd0+71Dr1694rDDDotzzjknfve738XPf/7zmDVrVhx11FF5t1Y3nn766fj+978fxx57bIwePTqWLl3a/kPHDBkyJIYOHdr+06dPn+jTp08MHTo079bqyrBhw2LcuHFx+umnx/z58+OBBx6Iyy+/PI488si8W6sb48ePjx49esSZZ54ZixYtinvvvTcuu+yymDhxYt6tAe8Qs9GGMxttOLNRGmajDWc26phCtVqt5t1E3lavXh3nnHNO3H333dG3b9/47Gc/G5MmTcq7rbpx+eWXx7e+9a03Pe/JJ598h7v553DaaadFRMQFF1yQcyf15x//+EdMmzYt7rnnnujVq1d88pOfjBNOOCEKhULerdWNp556Kr7xjW/E7373u9hkk03iU5/6VBx99NGWIXQjZqMNYzZKz2yUndlow5mN1k+wAAAAAGTW7T8KAQAAAGQnWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAA5GD9+fIwYMaL9Z/vtt4+DDjoorrrqqmS3MXHixLjkkksiIuK0006L0047bb3XaWlpiR/96EeZb/OWW26J8ePHZ74+ANA9mY2gvjXk3QB0V1OmTImDDz44IiJaW1vjf/7nf+KMM86IjTbaKA477LCkt3XGGWd06HJ33HFHXHbZZXHEEUckvX0AgPUxG0H9csQC5KRfv34xaNCgGDRoUGyxxRZx+OGHx1577RV33313TW6rX79+671ctVpNftsAAB1hNoL6JViALqShoSF69OgREydOjGnTpsX+++8f48aNixUrVsQLL7wQxx13XOy0004xfvz4mDlzZpTL5fbr3nPPPXHggQfGzjvvHOedd946573+cL+f/OQncdBBB8VOO+0UEyZMiD/84Q/x8MMPx+mnnx7PP/98jBgxIp577rmoVqvxve99L/bZZ58YM2ZMHHfccbF48eL2OkuWLInPfe5zsfPOO8fhhx8ef/zjH9+ZBQUAdAtmI6gPggXoAtauXRt33313PPTQQ7H//vtHxMufyZsxY0bMnDkz+vTpE1/84hdj4MCB8eMf/zimT58et99+e1x22WUREfHUU0/FSSedFEceeWTcfPPN0draGnPmzHnT23rggQfijDPOiKOPPjpuu+222GGHHeLzn/987LLLLjFlypR417veFQ8++GBsscUWcc0118Ttt98e3/rWt+KGG26IgQMHxjHHHBNr166NiIh///d/j0qlEjfeeGMce+yxcfXVV78zCwwA+KdmNoL64jsWICdnn312TJs2LSIi1qxZE01NTXH00UfHoYceGjfeeGOMGzcudt1114iImD17dixevDhuvPHGKBaLMWzYsDj11FPj9NNPjxNOOCFuvvnmGDNmTEyaNCkiIs4666y477773vR2b7jhhjjkkEPiyCOPjIiIr33ta9GjR49Yvnx59OvXL0qlUgwaNCgiIq644oo4++yzY4899oiIiPPOOy/22WefeOCBB+Ld7353PProo3HffffF4MGDY/jw4TFv3rz42c9+VsvFBgD8kzIbQf0SLEBOTjzxxPjABz4QERE9e/aMQYMGRalUaj9/yJAh7f9/+umnY9myZTF69Oj20yqVSqxZsyZeeumlePrpp2PkyJHt5/Xo0WOd319r0aJFMWHChPbfGxsb49RTT33D5VauXBl//vOf4+STT45i8dWDm9asWRPPPPNMNDc3x0YbbRSDBw9uP2/UqFF2ngBAJmYjqF+CBcjJwIEDY+jQoW95fs+ePdv/39raGsOGDYvvf//7b7hc2xcPvf7LhXr06PGmdRsaOva0b/sc4v/5P/8ntt5663XOGzBgQMyePbvDtwkAsD5mI6hfvmMB6sDWW28dixcvjk022SSGDh0aQ4cOjeeeey6++93vRqFQiOHDh8fjjz/efvlKpRLz589/01pDhw5d57xyuRzjx4+POXPmRKFQaD+9f//+MXDgwFi6dGn7bW6xxRYxY8aMWLRoUWy33XaxfPnyePbZZ9uv88QTT9Tg3gMArMtsBF2LYAHqwD777BNDhgyJr371q/Hkk0/GI488EmeddVb06tUrSqVSHHHEETFv3ry49NJLY+HChXHhhReu8w3FrzVx4sS47bbb4sc//nE8++yzMX369KhWq7H99ttHr169Yvny5fHMM89Ea2trTJo0Kb7zne/EvffeG88880yceeaZ8dvf/jaGDRsW22yzTey1114xZcqUmD9/fvz85z+Pa6655h1eMgBAd2Q2gq5FsAB1oFQqxaWXXhqVSiWOOOKI+NKXvhT77rtvnHnmmRHxctJ+6aWXxh133BGHHXZYLF26NPbdd983rbXbbrvF2WefHd/73vfi0EMPjSeeeCIuu+yyaGpqij333DOGDh0aH/7wh+OJJ56Iz372s/Hxj388pk6dGocddlgsXrw4rrzyyhgwYEBERHz729+OjTfeOCZMmBAXX3xxTJw48R1bJgBA92U2gq6lUH39B4EAAAAAOsgRCwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADI7P8Dar8EP8XggvsAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 5
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
